#include <iostream>
#include <string>

using namespace std;


/*
析构顺序
    先析构 子对象
    再析构 父对象
*/

class person
{

public:     // 公共类型
    int A;
protected:  // 保护类型
    int B;
private:    // 私有类型
    int C;

public:
    person(){
        cout << "基类 空 构造 " << endl;
    }
    person(int A , int B , int C) : A(A) , B(B) , C(C)
    {
        cout << "基类 有参 构造 " << endl;
    }
    
    ~person() { 
        cout << "基类的析构" << endl;   
    }

    void set_C(int C)
    {
        this->C = C;
    }
};


class Student : public person
{
public:
    int D;
    int E;
public:
    Student(int A , int B , int C , int D , int E) : person(A , B , C) , D(D) , E(E)
    {
        cout << "派生类 有参 构造 " << endl;
    }
    Student()
    {
         cout << "派生类 空 构造 " << endl;
    }
    ~Student() 
    {
        cout << "派生类的析构" << endl;
    }

};



void func(Student A)
{
    return ;
}



int main(int argc, char const *argv[])
{
    person p1;

    func(p1);

    
    return 0;
}


